package innova.controlador;

import innova.modelo.Idea;
import innova.modelo.Permitido;
import innova.modelo.Usuario;

import java.util.ArrayList;
import java.util.List;

public class UsuarioController {

	private List<Usuario> usuarios;

	public UsuarioController() {
		this.usuarios = new ArrayList<>();

		// Creando algunos usuarios
		Usuario u1 = new Usuario();
		u1.setIdUsuario(getCodigoAutomatico());
		u1.setNombresUsuario("Joan");
		u1.setApellidoPaternoUsuario("Carbajal");
		u1.setApellidoMaternoUsuario("Guevara");
		u1.setTipoDocumentoUsuario("D");
		u1.setNumeroDocumentoUsuario("24567878");
		u1.setCorreoUsuario("kenrod15@gmail.com");
		u1.setTipoUsuario("D");
		registrar(u1);

		Usuario u2 = new Usuario();
		u2.setIdUsuario(getCodigoAutomatico());
		u2.setNombresUsuario("Lisbeth");
		u2.setApellidoPaternoUsuario("Osorio");
		u2.setApellidoMaternoUsuario("Guerra");
		u2.setTipoDocumentoUsuario("D");
		u2.setNumeroDocumentoUsuario("12123434");
		u2.setCorreoUsuario("losorio@gmail.com");
		u2.setTipoUsuario("E");
		registrar(u2);

		Usuario u3 = new Usuario();
		u3.setIdUsuario(getCodigoAutomatico());
		u3.setNombresUsuario("Olga");
		u3.setApellidoPaternoUsuario("Rojas");
		u3.setApellidoMaternoUsuario("Orbegoso");
		u3.setTipoDocumentoUsuario("D");
		u3.setNumeroDocumentoUsuario("23231414");
		u3.setCorreoUsuario("orojas@gmail.com");
		u3.setTipoUsuario("D");
		registrar(u3);

		Usuario u4 = new Usuario();
		u4.setIdUsuario(getCodigoAutomatico());
		u4.setNombresUsuario("Nelson");
		u4.setApellidoPaternoUsuario("Zanabria");
		u4.setApellidoMaternoUsuario("Tah");
		u4.setTipoDocumentoUsuario("D");
		u4.setNumeroDocumentoUsuario("01012323");
		u4.setCorreoUsuario("nzanabria@gmail.com");
		u4.setTipoUsuario("E");

		// Creando algunas ideas
		Idea i1 = new Idea();
		i1.setIdIdea(1);
		i1.setTituloIdea("Idea 001");
		i1.setDescripcionIdea("Descripcion de la idea 001.");

		Idea i2 = new Idea();
		i2.setIdIdea(2);
		i2.setTituloIdea("Idea 002");
		i2.setDescripcionIdea("Descripcion de la idea 002.");

		// Creando algunos permitidos
		Permitido p1 = new Permitido();
		p1.setIdPermitido(1);
		p1.setIdea(i1);
		p1.setUsuario(u4);

		Permitido p2 = new Permitido();
		p2.setIdPermitido(2);
		p2.setIdea(i2);
		p2.setUsuario(u4);

		List<Permitido> permitidos = new ArrayList<>();
		permitidos.add(p1);
		permitidos.add(p2);

		u4.setPermitidos(permitidos);

		registrar(u4);

		Usuario u5 = new Usuario();
		u5.setIdUsuario(getCodigoAutomatico());
		u5.setNombresUsuario("Fernando");
		u5.setApellidoPaternoUsuario("Egusquiza");
		u5.setApellidoMaternoUsuario("Beltran");
		u5.setTipoUsuario("E");
		registrar(u5);

		Usuario u6 = new Usuario();
		u6.setIdUsuario(getCodigoAutomatico());
		u6.setNombresUsuario("Facundo");
		u6.setApellidoPaternoUsuario("Ortiz");
		u6.setApellidoMaternoUsuario("Moy");
		u6.setTipoUsuario("E");
		registrar(u6);
	}

	public List<Usuario> buscar() {
		// Listando todos los usuarios
		return usuarios;
	}

	public List<Usuario> buscar(Usuario usuario) {
		// Creando un listado de resultado
		List<Usuario> resultado = new ArrayList<>();

		// Recorriendo los usuarios
		for (Usuario item : usuarios) {
			// Verificando si es igual por el codigo
			if (item.getIdUsuario() == usuario.getIdUsuario()) {
				// Asignando el item al resultado
				resultado.add(item);
			}
			else if(item.getTipoUsuario() == usuario.getTipoUsuario()) {
				//Asignando el item al resultado
				resultado.add(item);
			}
		}

		// Devolviendo el resultado
		return resultado;
	}

	public void eliminar(Usuario usuario) {
		// Eliminando el usuario
		usuarios.remove(usuario);
	}

	public void registrar(Usuario usuario) {
		// Guardando en el listado
		usuarios.add(usuario);
	}

	public int getCodigoAutomatico() {
		// Contando la cantidad de usuarios
		int codigoAutomatico = 0;

		if (usuarios == null) {
			// Asignando el valor
			codigoAutomatico = 1;
		} else {
			// Obteniendo la cantidad
			int cantidad = usuarios.size();
			codigoAutomatico = cantidad + 1;
		}

		return codigoAutomatico;
	}

	public boolean existe(Usuario usuario) {
		// Recorriendo las ideas
		for (Usuario item : usuarios) {
			// Verificando si es igual por el t�tulo o palabras claves
			if (item.getNumeroDocumentoUsuario().equals(
					usuario.getNumeroDocumentoUsuario())) {
				// Si existe
				return true;
			} else if (item.getCorreoUsuario().equals(
					usuario.getCorreoUsuario())) {
				// Si existe
				return true;
			}
		}

		return false;
	}
}
